<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>likevue</title>
</head>
<body>
    <div id="root">
        <div>{{name}}</div>
        <div>{{message}}</div>
    </div>

    <script>
        // 步骤拆解
        // 1 拿到模板
        // 2 拿到数据
        // 3 数据和模板结合
        // 4 添加到页面


        // 1
        let tempNode = document.getElementById('root');
        // 2
        let data = {
            name: 'str',
            message: '消息'
        }
        // 3  递归替换为真实数据
        function commpiler(template, data) {
            let childNodes = template.childNodes;
            childNodes.forEach(node => {
                let nodeType = node.nodeType;
                // nodeType // 3 文本  1 元素
                if (nodeType === 3) {
                    let text = node.nodeValue;
                    text = text.replace(/\{\{(.+?)\}\}/g, (item, itemInner) => {
                        return data[itemInner];
                    });
                    node.nodeValue = text;
                } else if (nodeType === 1) {
                    commpiler(node, data);
                }
            });
        }
        // 这样重新构造了 tempNode 相当于破坏了 tempNode模板 所以应该深拷贝这个元素对象
        let gennerateNode = tempNode.cloneNode(true);
        commpiler(gennerateNode, data);
        console.log('generate', gennerateNode);
        console.log('tempNode', tempNode);

        // 添加到页面
        tempNode.parentNode.replaceChild(gennerateNode, root)
    </script>
</body>
</html>